package com.chinatechstar.component.commons.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Objects;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串工具类
 *
 * @author Rei
 */
public class StrUtils {
    /**
     * 该正则表达式可以匹配所有的数字 包括负数
     */
    private final static Pattern IS_NUMERIC_PATTERN = Pattern.compile("-?[0-9]+(\\.[0-9]+)?");

    /**
     * 生成 32 位的 uuid。
     *
     * @return String
     */
    public static String getUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    /**
     * 判断字符串是否是数字
     *
     * @param str 字符串
     * @return boolean
     */
    public static boolean isNumeric(String str) {
        String bigStr;
        try {
            bigStr = new BigDecimal(str).toString();
        } catch (Exception e) {
            //异常 说明包含非数字。
            return false;
        }
        // matcher是全匹配
        Matcher isNum = IS_NUMERIC_PATTERN.matcher(bigStr);
        return isNum.matches();
    }

    /**
     * 判断字符串是否是数字或者空字符
     *
     * @param str 字符串
     * @return BigDecimal
     */
    public static BigDecimal numericOrZero(String str) {
        if (isNumeric(str)) {
            return new BigDecimal(str);
        } else {
            return new BigDecimal(0);
        }
    }

    /**
     * 判断字符串是否为空。
     * null 或 '' 都会判断为空。
     *
     * @param str 字符串
     * @return Boolean
     */
    public static Boolean isNullOrEmpty(String str) {
        return (str == null) || (str.length() == 0);
    }

    /**
     * 判断是否含有特殊字符
     *
     * @param str 字符串
     * @return true为包含，false为不包含
     */
    public static boolean isSpecialChar(String str) {
        String regEx = "[ _`~!@#$%^&*()+=|{}':;,\\[\\].<>/?！￥…（）—【】‘；：”“’。，、？]|\n|\r|\t";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.find();
    }

}
